As is generally known, computer systems have a processor adapted to process operating instructions and an operating system (OS) adapted to manage application programs. The operating system interacts with the processor to execute programs, instructions, tasks, threads, etc.
Many modern computer systems utilize a multi-core processor having two or more processor cores interfaced for enhanced performance or more efficient processing of multiple tasks and threads. In a multi-core processor, multiple cores may not be identical, wherein for example, some cores may consume less power while others may have higher performance. Also, multiple cores of a processor may be grouped into dependency groups so that cores within a dependency group may share computing resources, caches, power and/or frequency domains.
However, current operating systems are largely unaware of multi-core processing techniques that achieve optimal performance and/or power with non-identical multi-core processors, and current operating systems typically fail to recognize the different characteristics and inter-dependencies of non-identical multi-cores to schedule threads for optimal performance and/or power. Even if current operating systems were adapted to be aware of these differences, the performance and/or power demand of a given thread may change dynamically, and moving a thread from one core to another core by a software means would be problematic with long latency issues. Hence, current operating systems do not optimize multi-core processing techniques.